﻿//#include <iostream>
//
//using namespace std;
//
//
//// 1 ————————
//
////int fact(int x, int y)
////{
////	return 1;
////}
////
////int fact(int a, int b)
////{
////	return 1;
////}
////
//////double fact(int x, int y) //函数重定义 即使返回类型不同也不行
//////{
//////	return 1;
//////}
//
//
////// 2 ——————————
//
////////a 不同作用域下的同名函数
////void fact(int a, int b)
////{
////	cout << "int fact(int a, int b)" << endl;
////}
////
////namespace one
////{
////	void fact(int a, int b)
////	{
////		cout << "int fact(int a, int b)" << endl;
////	}
////}
////
////namespace two
////{
////	void fact(int a, int b)
////	{
////		cout << "int fact(int a, int b)" << endl;
////	}
////}
////
//////如果展开的话 出现调用歧义 而不是函数重载
////using namespace one;
////using namespace two;
////
////int main()
////{
////	fact(1, 2);
////	one::fact(1, 2);
////	return 0;
////}
//
//
//// 3 ———————————— 相同的域
//
////b 参数类型不同
//void fact(int a, int b)
//{
//	cout << "int fact(int a, int b)" << endl;
//}
//
//void fact(double a, int b)
//{
//	cout << "void fact(double a, int b)" << endl;
//}
//
//// c 参数个数不同
//
//void fact(int a)
//{
//	cout << "int fact(int a, int b)" << endl;
//}
//
//
////d 参数类型顺序不同
//void fact(int a, double b)
//{
//	cout << "int fact(int a, double b)" << endl;
//}
//
//
////下面两个构造函数重载
//// f() 但是这样调用存在歧义
//void f()
//{
//	cout << "f()" << endl;
//}
//
//void f(int a = 10)
//{
//	cout << "f(int a)" << endl;
//}
//
//int main()
//{
//	fact(1, 2);
//	fact(1, 2.0);
//	fact(1);
//	fact(1.0, 2);
//
//	f();
//	f(2);
//	return 0;
//}